<TagAttribute("contrail","cont","????","????",3,324)>
Public Class CONTRAIL_TAG
Inherits HaloTag
Public Const Extension as String = "contrail"
Public Const FourCC as String = "cont"
Public Const ParentFourCC as String = "????"
Public Const GrandParentFourCC as String = "????"
Public Const [Version] as Short = 3
Public Const HeaderLength as Integer = 324

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 19)>
Public flags as Short

''' <summary>
''' these flags determine which fields are scaled by the contrail density
''' </summary>
<TagField("scale flags", 1, 19)>
Public scale_flags as Short

''' <summary>
''' 
''' </summary>
#Region "point creation"

''' <summary>
''' this many points are generated per second
''' </summary>
<TagField("point generation rate:points per second", 1, 0)>
Public point_generation_rate as Single

''' <summary>
''' velocity added to each point's initial velocity
''' </summary>
<TagField("point velocity:world units per second", 2, 1)>
Public point_velocity as Single()

''' <summary>
''' initial velocity is inside the cone defined by the marker's forward vector and this angle
''' </summary>
<TagField("point velocity cone angle:degrees", 1, 0)>
Public point_velocity_cone_angle as Single

''' <summary>
''' fraction of parent object's velocity that is inherited by contrail points.
''' </summary>
<TagField("inherited velocity fraction", 1, 0)>
Public inherited_velocity_fraction as Single

''' <summary>
''' 
''' </summary>
#End Region
#Region "rendering"

''' <summary>
''' this specifies how the contrail is oriented in space
''' </summary>
<TagField("render type", 1, 17)>
Public render_type as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding as Byte()

''' <summary>
''' texture repeats per contrail segment
''' </summary>
<TagField("texture repeats u", 1, 0)>
Public texture_repeats_u as Single

''' <summary>
''' texture repeats across contrail width
''' </summary>
<TagField("texture repeats v", 1, 0)>
Public texture_repeats_v as Single

''' <summary>
''' the texture along the contrail is animated by this value
''' </summary>
<TagField("texture animation u:repeats per second", 1, 0)>
Public texture_animation_u as Single

''' <summary>
''' the texture across the contrail is animated by this value
''' </summary>
<TagField("texture animation v:repeats per second", 1, 0)>
Public texture_animation_v as Single

''' <summary>
''' 
''' </summary>
<TagField("animation rate:frames per second", 1, 0)>
Public animation_rate as Single

''' <summary>
''' 
''' </summary>
<TagField("bitmap", 16, 10)>
Public bitmap as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("first sequence index", 1, 23)>
Public first_sequence_index as Short

''' <summary>
''' 
''' </summary>
<TagField("sequence count", 1, 23)>
Public sequence_count as Short

''' <summary>
''' 
''' </summary>
<TagField("", 64, -1)>
Public padding_1 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 40, -1)>
Public padding_2 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("shader flags", 1, 19)>
Public shader_flags as Short

''' <summary>
''' 
''' </summary>
<TagField("framebuffer blend function", 1, 17)>
Public framebuffer_blend_function as Short

''' <summary>
''' 
''' </summary>
<TagField("framebuffer fade mode", 1, 17)>
Public framebuffer_fade_mode as Short

''' <summary>
''' 
''' </summary>
<TagField("map flags", 1, 19)>
Public map_flags as Short

''' <summary>
''' 
''' </summary>
<TagField("", 28, -1)>
Public padding_3 as Byte()

''' <summary>
''' Optional multitextured second map
''' </summary>
#End Region
#Region "Secondary Map"

''' <summary>
''' 
''' </summary>
<TagField("bitmap", 16, 10)>
Public bitmap_1 as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("anchor", 1, 17)>
Public anchor as Short

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 19)>
Public flags_1 as Short

''' <summary>
''' 
''' </summary>
<TagField("u-animation source", 1, 17)>
Public u as Short

''' <summary>
''' 
''' </summary>
<TagField("u-animation function", 1, 17)>
Public u_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("u-animation period:seconds", 1, 0)>
Public u_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("u-animation phase", 1, 0)>
Public u_3 as Single

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("u-animation scale:repeats", 1, 0)>
Public u_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("v-animation source", 1, 17)>
Public v as Short

''' <summary>
''' 
''' </summary>
<TagField("v-animation function", 1, 17)>
Public v_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("v-animation period:seconds", 1, 0)>
Public v_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("v-animation phase", 1, 0)>
Public v_3 as Single

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("v-animation scale:repeats", 1, 0)>
Public v_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation source", 1, 17)>
Public rotation as Short

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation function", 1, 17)>
Public rotation_1 as Short

''' <summary>
''' 0 defaults to 1
''' </summary>
<TagField("rotation-animation period:seconds", 1, 0)>
Public rotation_2 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation phase", 1, 0)>
Public rotation_3 as Single

''' <summary>
''' 0 defaults to 360
''' </summary>
<TagField("rotation-animation scale:degrees", 1, 0)>
Public rotation_4 as Single

''' <summary>
''' 
''' </summary>
<TagField("rotation-animation center", 2, 1)>
Public rotation_5 as Single()

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding_4 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("zsprite radius scale", 1, 0)>
Public zsprite_radius_scale as Single

''' <summary>
''' 
''' </summary>
<TagField("", 20, -1)>
Public padding_5 as Byte()

''' <summary>
''' contrail_point_states_block
''' </summary>
<TagField("point states", 104, 11)>
Public point_states as List(Of POINT_STATES_BLOCK)
#End Region
Public Class POINT_STATES_BLOCK

''' <summary>
''' 
''' </summary>
#Region "state timing"

''' <summary>
''' the time a point spends in this state
''' </summary>
<TagField("duration:seconds:seconds", 2, 1)>
Public duration as Single()

''' <summary>
''' the time a point takes to transition to the next state
''' </summary>
<TagField("transition duration:seconds", 2, 1)>
Public transition_duration as Single()

''' <summary>
''' 
''' </summary>
#End Region
#Region "point variables"

''' <summary>
''' 
''' </summary>
<TagField("physics", 16, 10)>
Public physics as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("", 32, -1)>
Public padding as Byte()

''' <summary>
''' contrail width at this point
''' </summary>
<TagField("width:world units", 1, 0)>
Public width as Single

''' <summary>
''' contrail color at this point
''' </summary>
<TagField("color lower bound", 4, 3)>
Public color_lower_bound as Single()

''' <summary>
''' contrail color at this point
''' </summary>
<TagField("color upper bound", 4, 3)>
Public color_upper_bound as Single()

''' <summary>
''' these flags determine which fields are scaled by the contrail density
''' </summary>
<TagField("scale flags", 1, 20)>
Public scale_flags as Integer
#End Region

End Class

End Class
